package innerclass_;

public class AnonymousInnerclass01 {
    public static void main(String[] args) {
        new Outer04().fun();
    }
}
class Person{
    public void say(){

    }

    public void ok(String s){
        System.out.println(s + " is ok");
    }
}

class Outer04{
    private int n1 =199;
    private void hello(){//故意写的私有方法
        System.out.println("Helle world !!");
    }
    public void fun(){
        Person p1=new Person(){
            @Override
            public void say() {
                System.out.println("Person Anonymous 01  ， now n1= "+n1);//可以访问外部类的方法和属性，包括私有的
                hello();//调用外部类的方法
            }
        };
        p1.say();
        System.out.println(p1.getClass());//Outer04$1
        Person p2=new Person(){
            int n1=200;

            @Override
            public void say() {
                //调用变量还是遵循就近原则，同名的时候要调用类的属性就用 Outer.this.xxx 的方法访问
                System.out.println("n1="+n1+" Outer04.this.n1 = "+Outer04.this.n1);
            }
        };
        p2.ok("jack");
        p2.say();
        System.out.println(p2.getClass());//Outer04$2
    }
}